package com.ajavaer.framework.im.tencent.model;

import com.fasterxml.jackson.annotation.JsonProperty;

/**
 * 推送
 * <p>
 * 如果填写了 OfflinePushInfo，那么 TIMCustomElem 中与离线推送有关的信息配置会被忽略。目前 OfflinePushInfo 适用于 APNs 推送，以及 Android 厂商推送（小米、华为、魅族、OPPO 和 vivo 推送）。
 * </p>
 * 注意：
 * <p>
 * 由于 APNs 推送限制数据包大小不能超过4K，因此除去其他控制字段，建议 Desc 和 Ext 字段之和不要超过3K。
 *
 * @see <a href='https://cloud.tencent.com/document/product/269/2720'>官方文档</a>
 */
public class TencentImOfflinePushInfo {
    /**
     * 选填	0表示推送，1表示不离线推送。
     */
    @JsonProperty("PushFlag")
    private Integer pushFlag;
    /**
     * 选填	离线推送标题。该字段为 iOS 和 Android 共用。
     */
    @JsonProperty("Title")
    private Integer title;
    /**
     * 选填	离线推送内容 。
     */
    @JsonProperty("Desc")
    private String Desc;
    /**
     * 选填	离线推送透传内容。
     */
    @JsonProperty("Ext")
    private String ext;

    @JsonProperty("AndroidInfo")
    public TencentAndroidInfo androidInfo;

    @JsonProperty("ApnsInfo")
    public TencentApnsInfo apnsInfo;


    private class TencentAndroidInfo {
        /**
         * 选填	离线推送声音文件路径。
         */
        @JsonProperty("Sound")
        private String sound;

        public String getSound() {
            return sound;
        }

        public void setSound(String sound) {
            this.sound = sound;
        }
    }


    private class TencentApnsInfo {
        /**
         * 推送声音文件路径。
         */
        @JsonProperty("Sound")
        private String sound;
        /**
         * 选填	该字段用于标识 APNs 推送的标题，若填写则会覆盖最上层 Title。
         */
        @JsonProperty("Title")
        private String title;
        /**
         * 选填	该字段用于标识 APNs 推送的子标题。
         */
        @JsonProperty("SubTitle")
        private String subTitle;
        /**
         * 选填	该字段用于标识 APNs 携带的图片地址，当客户端拿到该字段时，可以通过下载图片资源的方式将图片展示在弹窗上。
         */
        @JsonProperty("Image")
        private String image;
        /**
         * 选填 这个字段缺省或者为0表示需要计数，为1表示本条消息不需要计数，即右上角图标数字不增加
         */
        @JsonProperty("BadgeMode")
        private Integer badgeMode;

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }

        public String getSubTitle() {
            return subTitle;
        }

        public void setSubTitle(String subTitle) {
            this.subTitle = subTitle;
        }

        public String getImage() {
            return image;
        }

        public void setImage(String image) {
            this.image = image;
        }

        public Integer getBadgeMode() {
            return badgeMode;
        }

        public void setBadgeMode(Integer badgeMode) {
            this.badgeMode = badgeMode;
        }

        public String getSound() {
            return sound;
        }

        public void setSound(String sound) {
            this.sound = sound;
        }
    }
}
